5.6 时间序列差创建与转换
1、时间差序列创建
时间差序列,可以理解为将多个时间差数据组在一个可迭代对象中,可以使用pd.timedelta_range()函数生成
import pandas as pd
t1=pd.timedelta_range( "2D","4D" ) #1、创建指定范围时间差序列
t2=pd.timedelta_range( "2D" , periods = 5 ) #2、创建指定范围个数时间差序列
t3=pd.timedelta_range( "2D" , periods = 5 , freq = "2D" ) #3、创建指定频率时间差序列
t4=pd.timedelta_range( "1D","20D" , freq = "4D" ) #3、创建指定频率个数时间差序列
print (t1)
print (t2)
print (t3)
print (t4)
返回:
TimedeltaIndex(['2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq='D')
TimedeltaIndex(['2 days', '3 days', '4 days', '5 days', '6 days'], dtype='timedelta64[ns]', freq='D')
TimedeltaIndex(['2 days', '4 days', '6 days', '8 days', '10 days'], dtype='timedelta64[ns]', freq='2D')
TimedeltaIndex(['1 days', '5 days', '9 days', '13 days', '17 days'], dtype='timedelta64[ns]', freq='4D')
2、时间差序列转换
1)多个时间差生成时间差序列
如将一组无规则的时间差字符串生成标准的时间差序列,则可以使用pd.TimedeltaIndex()
函数和pd.to_timedelta()函数
import pandas as pd
l=[ "1days","2D3h40s","1W1D23T" ]
t1=pd.to_timedelta(l)
t2=pd.TimedeltaIndex(l)
print (t1)
print (t2)
返回:
TimedeltaIndex(['1 days 00:00:00', '2 days 03:00:40', '8 days 00:23:00'], dtype='timedelta64[ns]', freq=None)
TimedeltaIndex(['1 days 00:00:00', '2 days 03:00:40', '8 days 00:23:00'], dtype='timedelta64[ns]', freq=None)
2)将纯数字生成时间差序列
可以同上面的函数将纯数字生成时间差序列,但需要设置数定的单位,也就是指定unit参数。
import pandas as pd
l=[ 4,1.87,120 ]
t1=pd.to_timedelta(l, unit = "D" ) #如果不指定则会默认为毫秒
t2=pd.TimedeltaIndex(l, unit = "W" )
print (t1)
print (t2)
返回:
TimedeltaIndex(['4 days 00:00:00', '1 days 20:52:48', '120 days 00:00:00'], dtype='timedelta64[ns]', freq=None)
TimedeltaIndex(['28 days 00:00:00', '13 days 02:09:36', '840 days 00:00:00'], dtype='timedelta64[ns]', freq=None)
3)时间戳运算生成时间差序列
两个时间相减得到的是时间差,转换时间戳序列得到的则是时间差序列
import pandas as pd
l1=pd.to_datetime([ "2021-03-01 12:34:17","2020-05-16 15:12:15" ]) # 时间戳序列
l2=pd.to_datetime([ "2021-02-26 11:30:10","2020-05-05 23:10:08" ])
print (l1-l2)
返回:
TimedeltaIndex(['3 days 01:04:07', '10 days 16:02:07'], dtype='timedelta64[ns]', freq=None)